---
title: Anchor.toml Configuration
description: Anchor workspace config reference documentation
---

## provider (required)

A wallet and cluster that are used for all commands.

Example:

```toml
[provider]
cluster = "localnet"                    # The cluster used for all commands.
wallet = "~/.config/solana/id.json"     # The keypair used for all commands.
```

## scripts (required for testing)

Scripts that can be run with `anchor run <script>`. The `test` script is
executed by `anchor test`.

Example:

```toml
[scripts]
test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
```

## features

### resolution

This tells the IDL to support account resolution. The default is `true`.

Example:

```
[features]
resolution = true
```

## workspace

### types

Adds a directory where you want the `<idl>.ts` file to be copied when running
`anchor build`. This is helpful when you want to keep this file in version
control, like when using it on the frontend, which will probably not have access
to the `target` directory generated by anchor.

Example:

```toml
[workspace]
types = "app/src/idl/"
```

### members

Sets the paths --relative to the `Anchor.toml`-- to all programs in the local
workspace, i.e., the path to the `Cargo.toml` manifest associated with each
program that can be compiled by the `anchor` CLI. For programs using the
standard Anchor workflow, this can be omitted. For programs not written in
Anchor but still want to publish, this should be added.

Example:

```toml
[workspace]
members = [
    "programs/*",
    "other_place/my_program"
]
```

### exclude

Opposite of `workspace.members`.

Example:

```toml
[workspace]
exclude = [
    "programs/my_program"
]
```

## programs

Example:

```toml
[programs.localnet]
my_program = "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"
```

The addresses of the programs in the workspace.

`programs.localnet` is used during testing on localnet where it's possible to
load a program at genesis with the `--bpf-program` option on
`solana-test-validator`.

## test

### startup_wait

Increases the time anchor waits for the `solana-test-validator` to start up.
This is, for example, useful if you're cloning (see `test.validator.clone`) many
accounts which increases the validator's startup time.

Example:

```toml
[test]
startup_wait = 10000
```

### genesis

Makes commands like `anchor test` start `solana-test-validator` with a given
program already loaded.

Example

```toml
[[test.genesis]]
address = "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"
program = "dex.so"

[[test.genesis]]
address = "22Y43yTVxuUkoRKdm9thyRhQ3SdgQS7c7kB6UNCiaczD"
program = "swap.so"
upgradeable = true
```

### upgradeable

Deploys the program-to-test using `--upgradeable-program`. This makes it
possible to test that certain instructions can only be executed by the program's
upgrade authority. The initial upgrade authority will be set to
`provider.wallet`.

If unspecified or explicitly set to false, then the test program will be
deployed with `--bpf-program`, disabling upgrades to it.

Example:

```toml
[test]
upgradeable = true
```

## test.validator

These options are passed into the options with the same name in the
`solana-test-validator` cli (see `solana-test-validator --help`) in commands
like `anchor test`.

```toml
[test.validator]
url = "https://api.mainnet-beta.solana.com"     # This is the url of the cluster that accounts are cloned from (See `test.validator.clone`).
warp_slot = 1337                                # Warp the ledger to `warp_slot` after starting the validator.
slots_per_epoch = 5                             # Override the number of slots in an epoch.
rpc_port = 1337                                 # Set JSON RPC on this port, and the next port for the RPC websocket.
limit_ledger_size = 1337                        # Keep this amount of shreds in root slots.
ledger = "test-ledger"                          # Set ledger location.
gossip_port = 1337                              # Gossip port number for the validator.
gossip_host = "127.0.0.1"                       # Gossip DNS name or IP address for the validator to advertise in gossip.
faucet_sol = 1337                               # Give the faucet address this much SOL in genesis.
faucet_port = 1337                              # Enable the faucet on this port.
dynamic_port_range = "1337 - 13337"             # Range to use for dynamically assigned ports.
bind_address = "0.0.0.0"                        # IP address to bind the validator ports.
```

### test.validator.clone

Use this to clone an account from the `test.validator.clone.url` cluster to the
cluster of your test. If `address` points to a program owned by the "BPF
upgradeable loader", anchor (`>= 0.23.0`) will clone the program data account of
the program for you automatically.

Example:

```toml
[test.validator]
url = "https://api.mainnet-beta.solana.com"

[[test.validator.clone]]
address = "7NL2qWArf2BbEBBH1vTRZCsoNqFATTddH6h8GkVvrLpG"
[[test.validator.clone]]
address = "2RaN5auQwMdg5efgCaVqpETBV8sacWGR8tkK4m9kjo5r"
[[test.validator.clone]]
address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" # implicitly also clones PwDiXFxQsGra4sFFTT8r1QWRMd4vfumiWC1jfWNfdYT
```

### test.validator.account

Use this to upload an account from a `.json` file.

Example:

```toml
[[test.validator.account]]
address = "Ev8WSPQsGb4wfjybqff5eZNcS3n6HaMsBkMk9suAiuM"
filename = "some_account.json"

[[test.validator.account]]
address = "Ev8WSPQsGb4wfjybqff5eZNcS3n6HaMsBkMk9suAiuM"
filename = "some_other_account.json"
```

## toolchain

Override toolchain data in the workspace similar to
[`rust-toolchain.toml`](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file).

```toml
[toolchain]
anchor_version = "0.31.1"    # `anchor-cli` version to use(requires `avm`)
solana_version = "2.1.21"     # Solana version to use(applies to all Solana tools)
package_manager = "yarn"     # JS package manager to use
```
